package de.hdu.pms.ho.ctrl;


import javax.servlet.*;
import javax.servlet.http.*;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;

import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.classic.Session;

import de.hdu.pms.ho.model.Arbeitsplan;
import java.io.*;
import java.util.*;

/**
 * Catches all {@link Arbeitsplan} objects from the database and takes it into PDF list.
 * The list will be open in a new browser tab.
 *
 * @author Helena Semmel
 */

public class Arbeitsplan2pdf extends HttpServlet {
	
	private static final long serialVersionUID = 1L;	

	public void init(ServletConfig config) throws ServletException{
		super.init(config);
	}
	
	public void doGet(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException{
		doPost(request, response);
	}
	
	public void doPost(HttpServletRequest request, 
			HttpServletResponse response) 
			throws ServletException, IOException{
		
		SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
		Session session = sf.getCurrentSession();
		session.beginTransaction();	
		SQLQuery c = session.createSQLQuery("select * from arbeitsplan order by fk_zimmer");
		c.addEntity("arbeitsplan", Arbeitsplan.class);
		@SuppressWarnings("unchecked")
		List<Arbeitsplan> allePläne = c.list(); //alle Datensaetze aus DB lesen
		
		response.setContentType("application/pdf");
		Document document = new Document(PageSize.A4.rotate());		//neues Dokument erstellen in DIN-A4, 

		try{

			PdfWriter.getInstance(document, 					//Instanziiert einen PDF-Dokumenten-Schreiber
				response.getOutputStream()); 
			document.open();
			document.newPage();
			document.addTitle("HotelOrganizerArbeitsplan");			//Metadaten
			document.addAuthor("HotelOrganizerAdministrator");
			document.addCreator("Helena Semmel");
			document.addCreationDate();

			Font font = FontFactory.getFont ( FontFactory.TIMES_BOLD,20 ) ;		//Schriftart
			Font headerfont = FontFactory.getFont(FontFactory.TIMES_BOLD, 12);
			headerfont.setColor(BaseColor.WHITE);
			Font cellfont = FontFactory.getFont(FontFactory.TIMES, 10);
			
			document.add(new Chunk ("\n" + "Arbeitsplan", font));		//Datenblock
/*			document.add(new Chunk ("\n" + "Arbeitsplan für KW "+ new GregorianCalendar().WEEK_OF_YEAR, font));*/	
			
			document.add(new Paragraph(" "));			//wird auch gebraucht, sonst verrutscht alles

			
			PdfPTable table = new PdfPTable(4);				//neue Tabelle wird angelegt mit 4 Spalten
			
			table.setWidthPercentage(60);
			table.setHorizontalAlignment(Element.ALIGN_LEFT);
			table.setTotalWidth(new float[]{ 7, 18, 15, 15});		//Spaltenbreiten
			
			table.getDefaultCell().setBackgroundColor(BaseColor.BLACK);
			table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);

				table.addCell(new Phrase ("Zimmer-Nr.", headerfont));		//fügt neue Zelle in Tabelle 
				table.addCell(new Phrase ("Name, Vorname", headerfont));
				table.addCell(new Phrase ("Schichtbeginn", headerfont));
				table.addCell(new Phrase ("Schichtende", headerfont));
							
				Boolean grey = false;
				table.getDefaultCell().setBackgroundColor(null);
			
			for (int i = 0; i < allePläne.size() ; i++){			//Schleife für alle Datensätze in der Tabelle
				
				if (grey){
					table.getDefaultCell().setBackgroundColor(BaseColor.LIGHT_GRAY);		//abwechselnde Farbe bei Zeilen
					grey = false;
				}
				else {
					table.getDefaultCell().setBackgroundColor(BaseColor.WHITE);
					grey = true;
				}
				//Befüllung aus DB:
				table.addCell(new Phrase ("" + allePläne.get(i).getZimmer().getNr(), cellfont));
				table.addCell(new Phrase (allePläne.get(i).getPersonal().getNachname() + "," + allePläne.get(i).getPersonal().getVorname(), cellfont));
				table.addCell(new Phrase (allePläne.get(i).getArbeitsbeginn(), cellfont));
				table.addCell(new Phrase (allePläne.get(i).getArbeitsende(), cellfont));
			}
		
			
			document.add(table);					//Tabelle wird in das Dokument eingeschleust
			document.add(new Paragraph (" "));
			document.add(new Chunk("\n" + "HotelOrganizer - Ein Projekt im Rahmen der PMS Vorlesung " + "\n" + new Date() +
					"\n" + "\n" + "Dominic Feig, Helena Semmel, Hendrik Neumann, Thomas Niedermeier", cellfont));
	
			document.close(); 
		}catch(DocumentException e){
			e.printStackTrace();
		}
	}
	
}

	